﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using FirebirdSql.Data.FirebirdClient;
using ZedGraph;

namespace University
{
    public partial class VUDATKY : Form
    {
         string admin;
         string podatku;
         string sotc;
        string fild, col;
        string word;
         Main mForm = new Main();
         List<string> dani = new List<string>();
       public  List<string> vudatok = new List<string>();
       public  List<string> month = new List<string>();
       public   List<string> year = new List<string>();
       public   List<string> years = new List<string>();
         int node;
        public VUDATKY()
        {
            InitializeComponent();
            
        }
         public VUDATKY(string a,string p,string s,int t)
        {
            admin = a;
            podatku = p;
            sotc = s;
            node = t;
            InitializeComponent();

            comboShow.Items.Add("Адміністративні витрати");
            comboShow.Items.Add("Податки");
            comboShow.Items.Add("Витрати на соціальні заходи");
            comboShow.Text = "Адміністративні витрати";

            groupAdd.Visible = false;
            groupSearch.Visible  = false;

            comboEMonth.Text = "січень";
            comboEMonth.Items.Add("січень");
            comboEMonth.Items.Add("лютий");
            comboEMonth.Items.Add("березень");
            comboEMonth.Items.Add("квітень");
            comboEMonth.Items.Add("травень");
            comboEMonth.Items.Add("червень");
            comboEMonth.Items.Add("липень");
            comboEMonth.Items.Add("серпень");
            comboEMonth.Items.Add("вересень");
            comboEMonth.Items.Add("жовтень");
            comboEMonth.Items.Add("листопад");
            comboEMonth.Items.Add("грудень");
        }
         public virtual void Show_charges(string data,string rik)
         {
           
             month.Clear();
             year.Clear();
             vudatok.Clear();
             years.Clear();
             comboRik.Items.Clear();
             dani.Clear();
             comboMonthDo.Items.Clear();

             String[] el = data.Split('\n');
             
             for (int i = 0; i < el.Length; i++)
             {
                 if (el[i].Contains(rik))
                 { dani.Add(el[i]); }
             }

             for (int i = 0; i < dani.Count; i++)
             {

                 month.Add(dani[i].Substring(0, dani[i].IndexOf(' ')));
                 year.Add(dani[i].Substring(dani[i].IndexOf(' ') + 1, 4));
                 vudatok.Add(dani[i].Substring(dani[i].LastIndexOf(' ') + 1, dani[i].Length - dani[i].LastIndexOf(' ') - 1));
             }

             if ((el.Length != 0)&&(el[0]!=""))
             {
                 for (int i = 0; i < el.Length; i++)
                 {

                     years.Add(el[i].Substring(el[i].IndexOf(' ') + 1, 4));
                 }
                 years.Sort();

                 comboRik.Items.Add(years[years.Count - 1]);
                 for (int i = years.Count - 2; i >= 0; i--)
                 {
                     if (years[i] != years[i + 1])
                     { comboRik.Items.Add(years[i]); }
                 }
             }
                 
         }
       
        public virtual void Graph(ZedGraphControl zg1,string title)
        {
            GraphPane myPane;
            myPane = zg1.GraphPane;
            myPane.Title.Text = title;
            myPane.YAxis.Title.Text = "P,grn";
            string s = comboRik.Text;
            myPane.XAxis.Title.Text = "Рік, " + s;

            double[] a = new double[vudatok.Count];
            string[] b = new string[month.Count];

            for (int i = 0; i < vudatok.Count; i++)
                a[i] = Convert.ToDouble(vudatok[i]);
            for (int i = 0; i < month.Count; i++)
                b[i] = month[i];

            BarItem curve = myPane.AddBar("Graphic", null, a, Color.Blue);
            curve.Label.IsVisible = false;
            myPane.XAxis.Type = AxisType.Text;
            myPane.XAxis.Scale.TextLabels = b;


            zg1.AxisChange();
            zg1.Invalidate();


        }


        public virtual void buttonShow_Click(object sender, EventArgs e)
        {
            comboRik.Text = System.DateTime.Today.Year.ToString();

            if (comboShow.Text == "Адміністративні витрати")
                Show_charges(admin, comboRik.Text);
            if (comboShow.Text == "Податки")
                Show_charges(podatku, comboRik.Text);
            if (comboShow.Text == "Витрати на соціальні заходи")
                Show_charges(sotc, comboRik.Text);

            groupAdd.Visible = false;
            groupSearch.Visible = true;
            groupPeriod.Visible = false;
            buttonEnter.Visible = true;
            comboMonthDo.Text="";
            comboMonthZ.Text="";

            zedVudatky.GraphPane.CurveList.Clear();
            zedVudatky.GraphPane.GraphObjList.Clear();
            Graph(zedVudatky,comboShow.Text);
        }

        public virtual void buttonSearch_Click(object sender, EventArgs e)
        {
            comboRik.Enabled = true;
            if (groupPeriod.Visible == true)
            {
                Show_piriod();
                groupPeriod.Visible = false;
            }
            else
            {
              

                if (comboShow.Text == "Адміністративні витрати")
                    Show_charges(admin, comboRik.Text);
                if (comboShow.Text == "Податки")
                    Show_charges(podatku, comboRik.Text);
                if (comboShow.Text == "Витрати на соціальні заходи")
                    Show_charges(sotc, comboRik.Text);
            }
            zedVudatky.GraphPane.CurveList.Clear();
            zedVudatky.GraphPane.GraphObjList.Clear();
            Graph(zedVudatky, comboShow.Text);
            buttonPeriod.Enabled = true;
        }

        public virtual void buttonAdd_Click(object sender, EventArgs e)
        {


            if (comboShow.Text == "Адміністративні витрати")
            {
                word = admin;
                col = "ADMINISTRATUVNI";
            }
            if (comboShow.Text == "Податки")
            {
                word = podatku;
                col = "PODATKU";
            }
            if (comboShow.Text == "Витрати на соціальні заходи")
            {
                word = sotc;
                col = "SOCZAHUST";
            }
            bool check = true;

            if ((comboEMonth.Text != "") && (textERik.Text != "") && (textEVutraty.Text != ""))
            {

                if (word.Contains(comboEMonth.Text + " " + textERik.Text))
                    check = false;

                if (check == true)
                {


                    if (word != "")
                        fild = word + '\n' + comboEMonth.Text + " " + textERik.Text + " " + textEVutraty.Text;
                    else
                        fild = comboEMonth.Text + " " + textERik.Text + " " + textEVutraty.Text;


                    FbConnection con1 = new FbConnection(mForm.str);
                    con1.Open();

                    FbCommand sqlupdate = new FbCommand("UPDATE VUDATKY SET " + col + "=@" + col + " WHERE UNIQUE_NO = @UNIQUE_NO", con1);
                    sqlupdate.Parameters.AddWithValue("UNIQUE_NO", node);
                    sqlupdate.Parameters.AddWithValue(col, fild);
                    sqlupdate.ExecuteNonQuery();


                    FbCommand cmd = new FbCommand(@"SELECT * FROM VUDATKY  where UNIQUE_NO=" + node, con1);
                    FbDataReader rdr = cmd.ExecuteReader();
                    rdr.Read();
                    admin = rdr["ADMINISTRATUVNI"].ToString();
                    podatku = rdr["PODATKU"].ToString();
                    sotc = rdr["SOCZAHUST"].ToString();
                    rdr.Close();
                    con1.Close();

                    if (comboShow.Text == "Адміністративні витрати")
                        Show_charges(admin, comboRik.Text);
                    if (comboShow.Text == "Податки")
                        Show_charges(podatku, comboRik.Text);
                    if (comboShow.Text == "Витрати на соціальні заходи")
                        Show_charges(sotc, comboRik.Text);



                    textERik.Clear();
                    textEVutraty.Clear();

                    groupAdd.Visible = false;
                    buttonEnter.Enabled = true;
                }
                else { MessageBox.Show("Дані за цей період вже введені!"); }
            }
            else
            { MessageBox.Show("Заповніть всі поля!"); }
 
        }
        public virtual void Show_piriod()
        {
            if (comboShow.Text == "Адміністративні витрати")
                Show_charges(admin, comboRik.Text);
            if (comboShow.Text == "Податки")
                Show_charges(podatku, comboRik.Text);
            if (comboShow.Text == "Витрати на соціальні заходи")
                Show_charges(sotc, comboRik.Text);

            int ind1 = 0;
            int ind2 = 0;

            for (int i = 0; i < month.Count; i++)
            {
                if (month[i] == comboMonthZ.Text) { ind1 = i; }
                if (month[i] == comboMonthDo.Text) { ind2 = i; }
            }
            List<string> moon=new List<string>();
            for (int i = ind1; i <= ind2; i++)
                moon.Add(month[i]);
            month.Clear();
            for (int i = 0; i < moon.Count; i++)
                month.Add(moon[i]);
        }
        public virtual void buttonPeriod_Click(object sender, EventArgs e)
        {
          
            if (comboShow.Text == "Адміністративні витрати")
                Show_charges(admin, comboRik.Text);
            if (comboShow.Text == "Податки")
                Show_charges(podatku, comboRik.Text);
            if (comboShow.Text == "Витрати на соціальні заходи")
                Show_charges(sotc, comboRik.Text);

            comboMonthZ.Items.Clear();
            comboMonthDo.Text = "";

            if (years.Contains(comboRik.Text))
            {
                groupPeriod.Visible = true;
                comboRik.Enabled = false;
                comboMonthZ.Text = month[0];
                for (int i = 0; i < month.Count; i++)
                    comboMonthZ.Items.Add(month[i]);
            }
            else
            { MessageBox.Show("Дані за цей період ще не внесені!"); }
            buttonPeriod.Enabled = false;
        }

        public virtual void comboMonthDo_Click(object sender, EventArgs e)
        {
            comboMonthDo.Items.Clear();
            int ind=0;
          for (int i = 0; i < month.Count; i++)
              if (month[i] == comboMonthZ.Text) { ind = i; }
          for (int i = ind; i < month.Count; i++)
              comboMonthDo.Items.Add(month[i]);
          
        }

        public virtual void buttonEnter_Click(object sender, EventArgs e)
        {
            groupAdd.Visible = true;
            buttonEnter.Enabled = false;
        }

    

       

      
     
        

        
    }
}
